Google workflowsでSlackにメッセージを送ってみる
はじめに
データアナリティクス事業本部のkobayashiです。
GoogleCloudのWorkflowsで通知処理を行う場合にSlack APIを使って任意のチャンネルにメッセージを送るワークフローを試してみたのでまとめます。
WorkflowsとSlackメッセージの送信API
Slackのチャンネルにメッセージを送信する方法はいくつかありますが、今回はchat.postMessageのAPIを使って送信してみます。chat.postMessageを使った設定方法と送信方法は次のエントリを参考に設定します。
Slackチャンネルにメッセージを投稿できるSlackAppを作成する | DevelopersIO
Cloud Workflowsでは外部のAPIにリクエストを送ることができるのでこの機能でSlackのchat.postMessageのAPIを使ってメッセージを送ります。
Google workflowsで外部のAPIからデータを取得してみる | DevelopersIO
では早速試してみます。
WorkflowsでSlackメッセージ送信を試してみる
workflowsのyamlファイルは次のものを使います。
main:
steps:
- init:
assign:
- secret_id: slack_boto_token
- access_secret:
call: googleapis.secretmanager.v1.projects.secrets.versions.accessString
args:
secret_id: ${secret_id}
project_id: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
result: slack_boto_token
- slack_notify:
call: http.post
args:
url: https://slack.com/api/chat.postMessage
headers:
Authorization: ${ "Bearer " + slack_boto_token}
Content-type: application/json
body:
channel: '{チャンネル名}'
markdown: True
text: ${ "Bot Tokenを使用した *Slcak通知* のテスト\n[ProjectID] `" + sys.get_env("GOOGLE_CLOUD_PROJECT_ID" ) + "`\n[CloudWorkflowID] `" + sys.get_env("GOOGLE_CLOUD_WORKFLOW_ID" )+ "`\n[CloudWorkflowExecutionID] `" + sys.get_env("GOOGLE_CLOUD_WORKFLOW_EXECUTION_ID" ) + "`"}
result: result_api
- the_end:
return:
- ${result_api}
Slackのchat.postMessageでメッセージを送信するにはあらかじめSlackアプリを作成してBot User OAuth Token
を取得しておくことが必要です。このBot User OAuth Token
を使ってAPIにリクエストする必要があるのでBot User OAuth Token
をSecretManagerに登録してWorkflows中で使います。
それではこのワークフローを実行するために準備をします。
SecretManagerに登録してあるシークレット情報のWorkflows中での使い方は別のエントリがありますのでそちらを踏襲します。
Google workflowsでSecretManagerコネクタを使ってみる | DevelopersIO
$ gcloud secrets create slack_boto_token --replication-policy="automatic"
$ printf "xoxb-xxxxxxxxxxxxxxxxxxxxxxxxx" | gcloud secrets versions add slack_boto_token --data-file=-
$ gcloud iam service-accounts create wf-sa-for-sm --display-name="Workflow Service Account for Accessing Secret Manager"
$ gcloud projects add-iam-policy-binding {プロジェクトID} \
--member="serviceAccount:wf-sa-for-sm@{プロジェクトID}.iam.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor" \
--condition="expression=resource.name.endsWith('/secrets/slack_boto_token/versions/latest'),title=AccessToEstatApiIdSecret,description=Allows access only to the slack_boto_token secret"
SecretManagerにslack_boto_token
としてBot User OAuth Token
を登録でき、workflowsで使うサービスアカウントにもread権限を与えました。
これで準備は整ったので これをdeployして実行してみます。
$ gcloud workflows deploy wf-slack_notify \
--source=wf-slack_notify.yml \
--location asia-northeast1 \
--service-account=wf-sa-for-sm@{プロジェクトID}.iam.gserviceaccount.com
$ gcloud workflows run wf-slack_notify --location asia-northeast1
argument: 'null'
createTime: '2024-10-28T00:11:46.265570350Z'
duration: 2.282765808s
endTime: '2024-10-28T00:11:48.548336158Z'
name: projects/233151396088/locations/asia-northeast1/workflows/wf-slack_notify/executions/d42b35db-3ffb-4eac-802a-a8977783f11d
result: '[{"body":{"channel":"CXXXXXXXXX","message":{"app_id":"xxxxxxxxxx","blocks":[{"block_id":"WAp3W","elements":[{"elements":[{"text":"Bot
Tokenを使用した ","type":"text"},{"style":{"bold":true},"text":"Slcak通知","type":"text"},{"text":"
のテスト\n[ProjectID] ","type":"text"},{"style":{"code":true},"text":"{プロジェクトID}","type":"text"},{"text":"\n[CloudWorkflowID]
","type":"text"},{"style":{"code":true},"text":"wf-slack_notify","type":"text"},{"text":"\n[CloudWorkflowExecutionID]...'
startTime: '2024-10-28T00:11:46.265570350Z'
state: SUCCEEDED
status:
currentSteps:
- routine: main
step: the_end
workflowRevisionId: 000022-611
Workflowsのslack_notify
ステップでSlackのchat.postMessageのAPIの呼び出しが成功しワークフロー全体の実行が成功しました。
Slackのチャンネルを確認するとCloud Workflowsから送信されたメッセージが届いていることが確認できます。
まとめ
GoogleCloudのWorkflowsで外部APIの実行を使ってSlackのチャンネルにメッセージを送ってみました。Workflowsの成功結果や失敗の詳細などをSlackで確認できるので今使っているWorkflowsにも組み込んでみたいと思います。
最後まで読んで頂いてありがとうございました。